// JavaScript Document
((function(a){
	//插件本体
	var kplug = function(opts){
		//数据库部分
		this.library = a.kuoqiJs.optionsInput(opts,{
			cols:[],//所有字段的相关信息
			headOptions:{},//关于头部信息的特殊配置
			options:{},//关于字段的所有相关定义
			classname:'',//table-name	
			box:null,//这个是盒子元素的相关信息
			data:[],//列表数据信息
			usePager:false,//是否启用分页，启动分页之后pagerOptions生效，默认否
			useDataer:false,//是否启用数据模块
			//init初始化
			init:function(ths){
				this.top = ths;
				//这里做很多东西的初始化
				//初始化所有的字段信息的一个初始化
				var _initCols = function(ths){
					ths.colser = [];
					for(var i =0;i<ths.top.library.cols.length;i++){
						ths.colser.push(ths.top.getColByIndex(i));
					}
				}
				_initCols(this);
			},
		});
		
		//数据模型部分
		this.dom = { };
		
		
		this.boxElement = '';//这个是盒子元素的相关信息
	
		
		//获取特定的col字段的相关信息
		//已使用
		this.getColByIndex = function(index){
			var ths = this;
			var opts = this.library.cols[index];
			return a.kuoqiJs.optionsInput(opts,{
				title:'(null)',//唯一对应的标题
				name:'temp_' + Math.ceil( Math.random() * Math.pow(10,4)),//唯一对应值
				classname:'',//绑定的classname
				type:'text',//字段类型
				type_name:'id',//类型名称
				type_code:'name',//类型字段
				headOptions:{},//关于头部的相关参数定义
				options:{},//关于参数的内容区域的一些常规属性定制
				select:[],//当type=select时候，选择列表
				//获取字段头的内容信息
				getBuffer:function(){
					var property = '';
					var proper = {};
					for(var i in ths.library.headOptions){
						proper[i] = ths.library.headOptions[i];	
					}
					for(var i in this.headOptions){
						proper[i] = this.headOptions[i];	
					}
					for(var i in proper){
						property+=property?(i+'="'+proper[i]+'"'):(' '+i+'="'+proper[i]+'"');
					}
					return '<th '+property+'>'+this.title+'</th>';	
				},
				//获取相关的值的信息
				getValue:function(data){
					var stream = '';
					if(this.type=='select'){
						for(var i = 0;i<this.select.length;i++){
							if(this.select[i][this.type_name]){
								stream = this.select[i][this.type_code];	
							}	
						}
					}else{
						//获取默认字段
						//判定是否有name
						if(this.name&&(data[this.name]!=undefined)){
							stream = data[this.name]
						}else{
							stream = this.value;	
						}
					}
					return stream;	
				}
			});
		};
		
		
		//追加一条数据进入到列表中
		this.addRow = function(data){
			this.library.data.push(data);	
		}
		
		//追加多条数据进入到表格中
		this.addRows = function(data){
			for(var i = 0;i<data.length;i++){
				this.addRow(data[i]);	
			}
		},
		
		//清空当前数据信息
		this.emptyRows = function(){
			this.library.data = [];
		}
		
		//设置当前的rows
		this.setRows = function(data){
			this.emptyRows();
			this.addRows(data);
		}
		
		//获取一行的相关数据
		this.getRow = function(data){
			var buffer = '';
			for(var i =0;i<this.library.colser.length;i++){
				var col = this.library.colser[i];
				var property = '';//每个字段的属性信息
				var property_sub = '';//每个字段里面默认的子元素的属性信息
				if(col.classname){
					property += 'class="'+col.classname+'"';	
				}
				if(col.options&&col.options.classname){
					property_sub += 'class="'+col.options.classname+'"';	
				}
				if(col.value&&(typeof(col.value)=='function')){
					var ret = col.value(data);
					buffer += '<td {{DATA.property}}>'+((ret==undefined)?'':ret)+'</td>';
				}else{
					buffer += '<td {{DATA.property}}><span {{DATA.property_sub}}>'+col.getValue(data)+'</span></td>';
				}
				buffer = buffer.replace('{{DATA.property}}',property);
				buffer = buffer.replace('{{DATA.property_sub}}',property_sub);
			}
			return '<tr>'+buffer+'</tr>';
		}
		
		//当某个分页的信息被自动点击的时候触发
		this.onPagerClick = function(){}
		
		
		//设置总的条目数量
		this.setAllcount = function(num){
			this.library.pager.count = (parseInt(num)>1)?parseInt(num):0;
		}
		//设置当前页面
		this.setPager = function(num){
			this.library.pager.pager = (parseInt(num)>1)?parseInt(num):1;
		}
		//获取当前页面信息
		this.getPager = function(){
			return this.library.pagerOptions.pager;
		}
		
		//执行点击一个分页信息
		this.doPager = function(index){
			this.setPager(index);//设置当前分页ID
			this.library.dataer&&this.library.dataer.load();
		}
		
		//获取分页的信息
		this.getPager = function(){ return this.library.pager;}
		
		//分页的数据初始化
		this.initPager = function(){
			this.library.pager = a.kuoqiJs.optionsInput(this.library.pagerOptions,{
				id:'ktable_temppager_' + Math.ceil( Math.random() * Math.pow(10,4)),//唯一对应值
				desc:'分页模块的对象包',
				version:'1.00.00',//版本号
				pageSize:0,//当前每个分页的数据量
				count:0,//总的数据量信息
				pager:1,//当前的页码信息
				classname:'',//给最外层的一个额定的classname
				showTablen:4,//展示一侧显示的数量
				getBuffer:function(){
					if(this.pageSize<=0){ this.pageSize = 20;}
					var page = Math.ceil( this.count / this.pageSize );
					var lis = '';
					//显示分页的数量的相关信息，先来个简单的
					//是否显示上一页
					if(this.pager>1){
						lis += '<li data-index="1" style="padding: 5px;cursor: pointer;">首页</li>';
						lis += '<li data-index="'+(this.pager - 1)+'" style="padding: 5px;cursor: pointer;">上一页</li>';
					}
					
					for(var i = 0;i<page;i++){
						if(this.pager==(i+1)){
							lis += '<li data-index="'+(i+1)+'" class="active" style="padding: 5px;">'+(i+1)+'</li>';
						}else{
							if(Math.abs(this.pager - i - 1 )>this.showTablen){
								continue;	
							}
							lis += '<li data-index="'+(i+1)+'" style="padding: 5px;cursor: pointer;">'+(i+1)+'</li>';
						}
					}
					//是否显示下一页
					if(this.pager<page){
						lis += '<li data-index="'+(this.pager + 1)+'" style="padding: 5px;cursor: pointer;">下一页</li>';
						lis += '<li data-index="'+page+'" style="padding: 5px;cursor: pointer;">尾页</li>';
					}
					return '<ul data-pager="'+this.id+'" class="'+this.classname+'" style="display: flex;list-style-type: none;">'+lis+'</ul>'
				},
			});
			return this.library.pager;
		},
		
		//数据模块初始化
		this.initDataer = function(){
			this.library.dataer = a.kuoqiJs.optionsInput(this.library.dataerOptions,{
				id:'ktable_tempdata_' + Math.ceil( Math.random() * Math.pow(10,4)),//唯一对应值
				desc:'数据模块的对象包',
				version:'1.00.00',//版本号
				top:this,
				url:'',//接口地址
				data:{},//额外的请求数据信息
				proxy:null,
				//初始化模块
				init:function(){
					this.proxy = a.kuoqiJs.proxy({
						action:this.url,	
						dataType:'json',
						method:'post',
					});
					//this.sync();
				},
				//同步数据接收的部分
				success:function(rs){},
				//异步执行具体渲染信息到列表中
				syncUI:function(){
					//初始化table的body表格信息
					this.top.dom.table.find('tbody').html(this.top.getRows());
					//执行系列方法的初始化
					this.top.syncFunctions();
				},
				//发送数据的部分
				load:function(){
					var ths = this;
					this.proxy.emptyDatas();//清空当前的所有数据信息
					this.proxy.setDatas(this.data);
					this.proxy.setData('pager',this.top.library.pager.pager);
					this.proxy.setData('page_size',this.top.library.pager.pageSize);
					this.proxy.success = function(rs){
						ths.success(rs);
					};
					this.proxy.error = function(rs){};//请求失败返回
					this.proxy.send();
				},
			});
			this.library.dataer.init();//发送一次数据请求
			return this.library.dataer;
		}
		
		//加载数据信息,异化数据显示内容
		//获取表格内容区域的数据信息
		this.getRows = function(){
			var buffer = '';
			//这里进行初始化之后会有很多新方法出来
			for(var i=0;i<this.library.data.length;i++){
				buffer += this.getRow(this.library.data[i]);
			}
			
			//判定是否启用分页信息
			if(this.library.usePager){
				//获取分页的相关信息
				var pager = this.getPager();
				var count = this.library.colser.length;
				buffer += '<tr><td colspan="'+count+'">'+pager.getBuffer()+'</td></tr>';
			}
			return buffer;
		},
		
		//初始化所有函数信息
		this.syncFunctions = function(){
			var ths = this;
			//重置分页的点击信息
			//获取分页的信息
			var pager = this.getPager();
			var pagerui = a.kuoqiJs(this.boxElement).find('ul[data-pager="'+pager.id+'"]');
			pagerui.find('li').on('click',function(){
				ths.doPager(a.kuoqiJs(this).attr('data-index'));	
			});
		}
		
		//异步加载数据信息
		//只同步数据必要显示的数据部分
		this.sync = function(){
			this.initPager();//初始化分页模块
			this.syncRows();//同步显示数据信息
			//查看是否启用分页的数据信息，如果启用，则初始化分页的信息进入到buffe里面
			//将buffer元素信息装进这个table中
			this.boxElement.html(this.buffer);
			
			//初始化所有的函数信息
			this.syncFunction();
			
			
		},
		
		//初始化UI,整体的UI部分
		this.initUI = function(){
			var layoutTable = function(ths){
				var layoutPrivite = function(){
					var stream = '';
					if(ths.library.classname){
						stream += 'class="'+ths.library.classname+'"';
					}
					return stream;
				};
				var layoutHead = function(ths){
					var stream = '';
					for(var i=0;i<ths.library.colser.length;i++){
						stream += ths.library.colser[i].getBuffer();
					}
					return '<tr>'+stream+'</tr>';
				}
				return '<table '+layoutPrivite(ths)+'><thead>'+layoutHead(ths)+'</thead><tbody></tbody></table>';	
			}
			this.dom.table = a.kuoqiJs(layoutTable(this));
		}
		
		//初始化函数
		this.init = function(){
			//初始化盒子元素相关信息
			//盒子元素是用来装table的
			if(this.library.box){
				this.boxElement = a.kuoqiJs(this.library.box);
			}else{
				this.boxElement = 	a.kuoqiJs('<div></div>');
			}
			
			//初始化表格的基本信息
			//使用内定参数的模式去做
			var _init_pager_options = function(ths){
				ths.initPager();
			};
			//初始化数据模块的参数输入
			var _init_dataer_options = function(ths){
				ths.initDataer();
			};
			
			//这个做一些初始化的操作
			var  init =  function (ths){
				_init_pager_options(ths);//初始化分页的部分的参数输入
				_init_dataer_options(ths);//初始化数据模块的参数输入
				ths.library.init(ths);//显示表格的基本信息
				//ths.sync();//初始化第一次
				//整理表格信息准备加载
				ths.initUI();//创建渲染UI
				//ths.library.dataer.initUI();//初始化dataer
				ths.boxElement.html(ths.dom.table);//将数据表信息写入到具体的里面
				ths.library.dataer.load();//加载数据
			}
			
			init(this);//所有的元素进行一个初始化
			
		}
		
		this.init();//初始化函数部分
	};
	a.kuoqiJs.plugIn.register('table',kplug);
})(this))